关键字POI搜索 Sample详情

最后更新时间:2019年7月5日

POI查询的关键字搜索方式,即根据用户输入的关键字、选择的类型进行模糊查询,搜索满足条件的POI信息点,可以通过标注、绘制或者列表方式展示查询到的兴趣点。

在进行POI查询之前,需准备POI数据,详细步骤参考POI数据组织模块,在此不赘述,接下来讲解具体的关键字搜索的编码实现方法。

1

POI查询对象准备

首先,创建并初始化POI查询对象,设置POI数据。

//创建POI查询对象
MGSPoiSearch *poiSearch=[[MGSPoiSearch alloc] init];
NSString *poiDbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"/MapGIS Mobile 2D Sample/POI/WuhanPOI.db"];  //POI数据路径
//为POI查询对象设置配置好的.db数据,并以此来初始化
[poiSearch initWithDBPath:poiDbPath];
//设置查询每页的结果数目
[poiSearch setPageSize:40];

2

设置查询条件

进行关键字POI搜索,需要在查询之前设置条件,首先构造查询条件对象MGSQuery,然后利用其接口设置查询的关键字,还可以设置查询的POI类型。代码调用如下所示,在此给定查询关键字为“武汉”,查询类型为MAPSERVER _ TYPE _ TOURISTATTRACTIOIN(景点),将查询得到包含关键字为武汉的景点POI点。当然也可查询多种类型。

//构造POI查询条件对象
MGSQuery *poiQuery=[[MGSQuery alloc] initWithCityCode:@"武汉" category:MAPSERVER_TYPE_TOURISTATTRACTIOIN cityCode:nil];
//设置给查询对象
[poiSearch setQuery:poiQuery];

代码说明:MGSQueryy的第一个参数为查询关键字的字符串;第二个参数为POI类型的组合,此为景点类型(MAPSERVER _ TYPE _ TOURISTATTRACTIOIN),也可定义组合(如餐馆 + 电影院 + 景点)。

SDK中提供的POI具体分类如下表所示,由MGSPoiTypeDef的字段提供,用户可以根据自己需要选择,在实际项目应用中,可以将这些类型以列表或其他形式展示给终端用户,从而让用户自行选择类型。

POI一级分类 POI二级分类 PoiTypeDef字段
所有POI类型 类型的全集 POI_TYPE_ALL
住宿服务 宾馆 POI_TYPE_OGC_ACCOMMODATION
汽车服务 加油站 POI_TYPE_AUTOCARSERVICE
科教文化 学校 POI_TYPE_EDUCATION
餐饮服务 中餐厅 POI_TYPE_FOODBEVERAGES
体育休闲服务 娱乐场所,网吧 POI_TYPE_INTERNETBAR
医疗相关服务 综合医院 POI_TYPE_OGC_MEDICALSERVICE
公共设施 公共厕所 POI_TYPE_PUBLICSERVICE
交通设施服务 停车场 POI_TYPE_PUBLICPARKINGLOT
地铁站 POI_TYPE_PUBLICSUBWAY
公交车站 POI_TYPE_PUBLICTRANSPORTATION
购物中心 商场 POI_TYPE_SHOPPING
超市 POI_TYPE_SUPERMARKET
风景名胜 景点 MAPSERVER_TYPE_TOURISTATTRACTIOIN

3

查询与结果展示

查询POI,遍历查询结果,并以文本图形、标注形式展示,核心代码如下:

//查询POI
MGSPoiPagedResult *poiPagedResult=[poiSearch searchPOI];
if (poiPagedResult != nil && poiPagedResult.totalPOICount > 0) {
    for (int i=1; i<=poiPagedResult.pageCount; i++) {
        //只获取第1页结果
        NSArray<MGSPoiItem *> *poiItemArr=[poiPagedResult getPageWithPageNumber:i];
        for (int j=0; j<[poiItemArr count]; j++) {
            //获取POI项
            MGSPoiItem *poiItem=poiItemArr[j];

            //获取坐标点
            MGSDot dot=[poiItem point];
            //经纬度转Web墨卡托
            [MGSSpaProjection lonLat2Mercator:&dot];

            //POI名称、电话、地址、行政区划代码、类型代码
            NSString *name=[poiItem name];
            NSString *tel=[poiItem tel];
            NSString *address=[poiItem address];
            NSString *adCode=[poiItem adCode];
            NSString *typeCode=[poiItem typeCode];
        }
    }
} else {
    NSLog(@"未查询到结果");
}

查询到POI结果后,可以通过文本图形、地图标注进行展示:

//文字图形
MGSGraphicText *graphicText=[[MGSGraphicText alloc] initWithPoint:dot text:name anchorPoint:CGPointMake(0.5f, 1.0f) fontSize:25 slopeFlag:NO];
[graphicText setColor:[UIColor blueColor]];
//添加标注
UIImage *image=[UIImage imageNamed:@"location"];
MGSAnnotation *annotation=[[MGSAnnotation alloc] initAnnotationWithTitle:name description:description point:dot image:image];
//绘制
[_mapView.graphicsOverlay addGraphic:graphicText];
[_mapView.annotationsOverlay addAnnotation:annotation];
[_mapView refresh];

展示效果如下图所示:

关键字POI搜索.jpg